{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Lecture 10 - Uncertainty Propagation: Perturbative Methods\n",
    "\n",
    "## Objectives\n",
    "\n",
    "+ To remember the Taylor expansion of multivaritae real functions\n",
    "+ To use the Laplace approximation to approximate arbitrary probability densities as Gaussians\n",
    "+ To use the Taylor expansion and the Laplace approximation to (approximately) propagate uncertainties through models\n",
    "+ To use the method of adjoints to calculate derivatives of dynamical systems or partial differential equations with respect to uncertain parameters\n",
    "\n",
    "## Readings\n",
    "\n",
    "+ None"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import math\n",
    "import scipy.stats as st\n",
    "import scipy\n",
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "import seaborn as sns\n",
    "sns.set_style('white')\n",
    "sns.set_context('talk')\n",
    "import warnings\n",
    "warnings.filterwarnings('ignore')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## The Taylor Expansion in 1D\n",
    "Let $g:\\mathbb{R}\\rightarrow\\mathbb{R}$ be a smooth real function and $x_0\\in\\mathbb{R}$.\n",
    "The [Taylor series expansion](https://en.wikipedia.org/wiki/Taylor_series) of $g(x)$ abount $x_0$ is:\n",
    "$$\n",
    "g(x) = g(x_0) + \\frac{dg(x_0)}{dx}(x-x_0) + \\frac{1}{2}\\frac{d^2g(x_0)}{dx^2}(x-x_0)^2+\\dots + \\frac{1}{n!}\\frac{d^ng(x_0)}{dx^n}(x-x_0)^n+\\dots\n",
    "$$\n",
    "You can use the Taylor expansion to approximate any function as a polynomial.\n",
    "\n",
    "### Example: 1D Taylor Series Expansion\n",
    "Take $g(x) = \\sin(x)$ and $x_0=0$.\n",
    "We have:\n",
    "$$\n",
    "\\frac{dg(0)}{dx} = \\cos(x)|_{x=0} = 1,\n",
    "$$\n",
    "$$\n",
    "\\frac{d^2g(0)}{dx^2} = -\\sin(x)_{x=0} = 0,\n",
    "$$\n",
    "$$\n",
    "\\frac{d^3g(0)}{dx^3} = -\\cos(x)_{x=0} = -1,\n",
    "$$\n",
    "and in general:\n",
    "$$\n",
    "\\sin(x) = \\sum_{k=0}^{\\infty} \\frac{(-1)^k}{(2k+1)!}x^{2k+1}.\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "max_taylor_order = 3\n",
    "fig, ax = plt.subplots()\n",
    "x = np.linspace(-np.pi, np.pi, 100)\n",
    "y_true = np.sin(x)\n",
    "y_taylor = np.zeros(x.shape)\n",
    "for k in range(max_taylor_order):\n",
    "    y_taylor += (-1.) ** k * 1. / math.factorial(2 * k + 1) * x ** (2 * k + 1)\n",
    "ax.plot(x, y_true, label='$\\sin(x)$')\n",
    "ax.plot(x, y_taylor, '--', label='Truncated Taylor series')\n",
    "plt.legend(loc='best')\n",
    "ax.set_ylim(-1.5, 1.5)\n",
    "ax.set_title('Maximum Taylor order: %d' % max_taylor_order)\n",
    "ax.set_xlabel('$x$')\n",
    "ax.set_ylabel('$g(x)$');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Questions\n",
    "\n",
    "+ Start increasing the maximum order of the series expansion until you get a satisfactory approximation."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## The Taylor Expansion in Higher Dimensions\n",
    "Let $g:\\mathbb{R}^d\\rightarrow \\mathbb{R}$ and $x_0\\in\\mathbb{R}^d$.\n",
    "The Taylor series expansion is:\n",
    "$$\n",
    "g(x) = g(x_0) + \\sum_{i=1}^d\\frac{\\partial g(x_0)}{\\partial x_i}(x_i-x_{0i})+\\frac{1}{2}\\sum_{i,j=1}^d\\frac{\\partial^2g(x_0)}{\\partial x_i\\partial x_j}(x_i-x_{0i})(x-x_{0j}) + \\dots\n",
    "$$\n",
    "Another way of writing this is:\n",
    "$$\n",
    "g(x) = g(x_0) + \\nabla g(x_0)^T(x-x_0) + \\frac{1}{2}(x-x_0)^T\\nabla^2 g(x_0) (x-x_0),\n",
    "$$\n",
    "where the *Jacobian* is defined as:\n",
    "$$\n",
    "\\nabla g(x_0) = \\left(\\frac{\\partial g(x_0)}{\\partial x_1},\\dots,\\frac{\\partial g(x_0)}{\\partial x_1}\\right),\n",
    "$$\n",
    "and the *Hessian* is:\n",
    "$$\n",
    "\\nabla^2 g(x_0) = \\left(\\frac{\\partial^2g(x_0)}{\\partial x_i\\partial x_j}\\right)_{i,j=1}^d.\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## The Laplace Approximation in 1D\n",
    "If you are not interested in probabilities of rare events, you may approximate any probability density as a Gaussian (assuming that it is sufficiently narrow).\n",
    "Let $X$ be a random variable with probability density $p(x)$.\n",
    "Because $p(x)$ is positive, it is better to work with its logarithm.\n",
    "First, we find the maximum of $\\log p(x)$ which is called the *nominal value* (or just maximum):\n",
    "$$\n",
    "x_0 = \\arg\\max_x \\log p(x).\n",
    "$$\n",
    "Then, we take the Taylor expansion of $\\log p(x)$ about $x=x_0$:\n",
    "$$\n",
    "\\log p(x) = \\log p(x_0) + \\frac{d\\log p(x_0)}{dx} (x-x_0) + \\frac{1}{2}\\frac{d^2\\log p(x_0)}{dx^2} (x-x_0)^2 + \\dots.\n",
    "$$\n",
    "Since $x_0$ is a critical point of $\\log p(x)$, we must have that:\n",
    "$$\n",
    "\\frac{d\\log p(x_0)}{dx} = 0.\n",
    "$$\n",
    "So, the expansion becomes:\n",
    "$$\n",
    "\\log p(x) = \\frac{1}{2}\\frac{d^2\\log p(x_0)}{dx^2} (x-x_0)^2 + \\text{const}.\n",
    "$$\n",
    "Therefore,\n",
    "$$\n",
    "p(x) \\propto \\exp\\left\\{ \\frac{1}{2}\\frac{d^2\\log p(x_0)}{dx^2} (x-x_0)^2 \\right\\}.\n",
    "$$\n",
    "Since $x_0$ is a maximum of $\\log p(x)$, the matrix $\\frac{d^2\\log p(x_0)}{dx^2}$ must be a negative number.\n",
    "Therefore, the number:\n",
    "$$\n",
    "c^2 = -\\left[\\frac{d^2\\log p(x_0)}{dx^2}\\right]^{-1},\n",
    "$$\n",
    "is positive.\n",
    "By inspection then, we see that:\n",
    "$$\n",
    "p(x) \\propto \\exp\\left\\{-\\frac{(x-x_0)^2}{2c^2}\\right\\}.\n",
    "$$\n",
    "Ignoring all higher order terms, we conclude:\n",
    "$$\n",
    "p(x) \\approx \\mathcal{N}\\left(x|x_0, -\\left[\\frac{d^2\\log p(x_0)}{dx^2}\\right]^{-1}\\right).\n",
    "$$\n",
    "This is the Laplace approximation in one dimension."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Example\n",
    "Let's just approximate a Gamma distribution with a Gaussian.\n",
    "We will do a case that works and a case that does not work."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "grad minus log p at x0 is:  1.7763568394002505e-09\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Construct the ``true random variable``\n",
    "alpha = 10\n",
    "X = st.gamma(a=alpha)\n",
    "# Find the maximum using an optimization method (the minus is because we will use a minimization method)\n",
    "minus_log_pdf_true = lambda x: -np.log(X.pdf(x))\n",
    "res = scipy.optimize.minimize_scalar(minus_log_pdf_true, bounds=[1., 8])\n",
    "# This is the maximum of the pdf\n",
    "x_0 = res.x\n",
    "# This is the value of the pdf at the maximum:\n",
    "p_0 = np.exp(-res.fun)\n",
    "# The derivative of the pdf at the maximum should be exaclty zero.\n",
    "# Let's verify it using numerical integration\n",
    "grad_m_log_p_0 = scipy.misc.derivative(minus_log_pdf_true, x_0, dx=1e-6, n=1)\n",
    "print('grad minus log p at x0 is: ', grad_m_log_p_0)\n",
    "# We need the second derivative.\n",
    "# We will get it using numerical integration as well:\n",
    "grad_2_m_log_p_0 = scipy.misc.derivative(minus_log_pdf_true, x_0, dx=1e-6, n=2)\n",
    "# The standard deviation of the Gaussian approximation to p(x) is:\n",
    "c = np.sqrt(1. / grad_2_m_log_p_0)\n",
    "# Using scipy code, the random variable that approximates X is:\n",
    "Z = st.norm(loc=x_0, scale=c)\n",
    "# Let's plot everything\n",
    "fig, ax = plt.subplots()\n",
    "x = np.linspace(x_0 - 6 * c, x_0 + 6 * c, 200)\n",
    "pdf_true = X.pdf(x)\n",
    "# Plot the truth:\n",
    "ax.plot(x, pdf_true)\n",
    "# Mark the location of the maximum:\n",
    "# Plot the approximation\n",
    "ax.plot(x, Z.pdf(x), '--')\n",
    "ax.plot([x_0] * 10, np.linspace(0, p_0, 10), ':')\n",
    "plt.legend(['PDF of Gamma(%.2f)' % alpha, 'Laplace approximation'], loc='best')\n",
    "ax.set_xlabel('$x$')\n",
    "ax.set_ylabel('PDF');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## The Laplace Approximation in Many Dimensions\n",
    "Then, we take the Taylor expansion of $\\log p(x)$ about $x=x_0$:\n",
    "$$\n",
    "\\log p(x) = \\log p(x_0) + \\nabla \\log p(x_0) (x-x_0) + \\frac{1}{2}(x-x_0)^T\\nabla^2 \\log p(x_0) (x-x_0) + \\dots.\n",
    "$$\n",
    "Since $x_0$ is a critical point of $\\log p(x)$, we must have that:\n",
    "$$\n",
    "\\nabla \\log p(x_0) = 0.\n",
    "$$\n",
    "So, the expansion becomes:\n",
    "$$\n",
    "\\log p(x) = \\frac{1}{2}(x-x_0)^T\\nabla^2 \\log p(x_0) (x-x_0) + \\text{const}.\n",
    "$$\n",
    "Therefore,\n",
    "$$\n",
    "p(x) \\propto \\exp\\left\\{ \\frac{1}{2}(x-x_0)^T\\nabla^2 \\log p(x_0) (x-x_0) \\right\\}.\n",
    "$$\n",
    "Since $x_0$ is a maximum of $\\log p(x)$, the matrix $\\nabla^2 \\log p(x_0)$ must be negative definite.\n",
    "Therefore, the matrix:\n",
    "$$\n",
    "C = -(\\nabla^2\\log p(x_0))^{-1},\n",
    "$$\n",
    "is positive definite.\n",
    "By inspection then, we see that:\n",
    "$$\n",
    "p(x) \\propto \\exp\\left\\{-\\frac{1}{2}(x-x_0)^TC^{-1}(x-x_0)\\right\\}.\n",
    "$$\n",
    "Ignoring all higher order terms, we conclude:\n",
    "$$\n",
    "p(x) \\approx \\mathcal{N}\\left(x|x_0, -(\\nabla^2\\log p(x_0))^{-1}\\right).\n",
    "$$\n",
    "This is the Laplace approximation in many dimensions."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Questions\n",
    "\n",
    "+ Experiment with various values of alpha for the true Gamma distribution. What happens when alpha is smaller than one. Why doesn't the method work at for that parameter?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Perturbation Approach in 1D\n",
    "\n",
    "Let $X\\sim p$ be a random vector and $Y=f(X)$ a scalar quantity of interest that depends on $X$.\n",
    "Our goal is to estimate the first order statistics of $Y$.\n",
    "In particular, the mean:\n",
    "$$\n",
    "\\mathbb{E}[f(X)] = \\int f(x) p(x)dx,\n",
    "$$\n",
    "and the variance:\n",
    "$$\n",
    "\\mathbb{V}[f(X)] = \\int \\left(f(x)-\\mathbb{E}[f(X)]\\right)^2p(x)dx.\n",
    "$$\n",
    "First, we take the laplace approximation for the random vector and approximate its density as a Gaussian.\n",
    "That is, we write:\n",
    "$$\n",
    "p(x) \\approx \\mathcal{N}\\left(x|\\mu, \\sigma^2\\right),\n",
    "$$\n",
    "with $\\mu$ and $\\Sigma$ as given by the Laplace approximation.\n",
    "Now, we take the Taylor expansion of $f(x)$ around $x=\\mu$:\n",
    "$$\n",
    "f(x) = f(\\mu) + \\frac{df(\\mu)}{dx} (x-\\mu)+\\dots\n",
    "$$\n",
    "Now, let's take the expecation over the Laplace approximation of $p(x)$.\n",
    "$$\n",
    "\\begin{array}{ccc}\n",
    "\\mathbb{E}[f(X)] &=& \\mathbb{E}\\left[f(\\mu) + \\frac{df(\\mu)}{dx} (X-\\mu) + \\dots\\right]\\\\\n",
    "&=& f(\\mu) + \\frac{df(\\mu)}{dx}\\mathbb{E}[X-\\mu] + \\dots\\\\\n",
    "&=& f(\\mu) + \\dots\n",
    "\\end{array}\n",
    "$$\n",
    "So, to *second order* we have:\n",
    "$$\n",
    "\\mathbb{E}[f(X)] \\approx f(\\mu).\n",
    "$$\n",
    "You can, of course, construct higher order approximations in this way.\n",
    "\n",
    "Let's now do the variance.\n",
    "We will use the formula:\n",
    "$$\n",
    "\\mathbb{V}[f(X)] = \\mathbb{E}[f^2(X)] - \\left[\\mathbb{E}[f(X)]\\right]^2.\n",
    "$$\n",
    "Keeping up to second order terms, we get:\n",
    "$$\n",
    "\\begin{array}{ccc}\n",
    "\\mathbb{E}[f^2(X)] &=& \\mathbb{E}\\left[\\left(f(\\mu) + \\frac{df(\\mu)}{dx} (X-\\mu) + \\dots\\right)^2\\right]\\\\\n",
    "&=& f^2(\\mu) + \\left(\\frac{df(\\mu)}{dx}\\right)^2\\mathbb{E}[(X-\\mu)^2] + 2f(\\mu)\\frac{df(\\mu)}{dx}\\mathbb{E}[X-\\mu] + \\dots\\\\\n",
    "&=& f^2(\\mu) + \\left(\\frac{df(\\mu)}{dx}\\right)^2\\sigma^2 + \\dots\n",
    "\\end{array}\n",
    "$$\n",
    "Therefore, for the variance we get:\n",
    "$$\n",
    "\\begin{array}{ccc}\n",
    "\\mathbb{V}[f(X)] &=& f^2(\\mu) + \\left(\\frac{df(\\mu)}{dx}\\right)^2\\sigma^2 + \\dots - \\left(f(\\mu) + \\dots\\right)^2\\\\\n",
    "&=& f^2(\\mu) + \\left(\\frac{df(\\mu)}{dx}\\right)^2\\sigma^2 - f^2(\\mu) + \\dots\\\\\n",
    "&=& \\left(\\frac{df(\\mu)}{dx}\\right)^2\\sigma^2 + \\dots\n",
    "\\end{array}\n",
    "$$\n",
    "So, to *first order* we have:\n",
    "$$\n",
    "\\mathbb{V}[f(X)] \\approx \\left(\\frac{df(\\mu)}{dx}\\right)^2\\sigma^2\n",
    "$$\n",
    "And, of course, we can go to higher order approximations.\n",
    "\n",
    "Now, having approximations for the mean and the variance, we may approximate the full density of the random variable $Y=f(X)$ by a Gaussian:\n",
    "$$\n",
    "p(y) \\approx \\mathcal{N}\\left(y|f(\\mu), \\left(\\frac{df(\\mu)}{dx}\\right)^2\\sigma^2\\right).\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Example: 1D Propagation of Uncertainty\n",
    "\n",
    "Let's solve a (very simple) uncertainty propagation problem using these techniques.\n",
    "Consider:\n",
    "$$\n",
    "X\\sim \\mathcal{N}(\\pi/2, 0.1^2),\n",
    "$$\n",
    "and\n",
    "$$\n",
    "f(x) = \\sin(x) e^{-0.5x}.\n",
    "$$\n",
    "We have:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Defining the densit of X:\n",
    "mu = 1.1\n",
    "sigma = 0.1\n",
    "X = st.norm(loc=mu, scale=sigma)\n",
    "# The function through which we want to propagate uncertainties\n",
    "f = lambda x: np.sin(x) * np.exp(-0.5 * x)\n",
    "fig1, ax1 = plt.subplots()\n",
    "x = np.linspace(0., np.pi, 200)\n",
    "ax1.plot(x, f(x))\n",
    "ax1.set_xlabel('$x$')\n",
    "ax1.set_ylabel('$f(x)$', color=sns.color_palette()[0])\n",
    "ax1.tick_params('y', colors=sns.color_palette()[0])\n",
    "ax2 = ax1.twinx()\n",
    "ax2.plot(x, X.pdf(x), color=sns.color_palette()[1])\n",
    "ax2.set_ylabel('$p(x)$', color=sns.color_palette()[1])\n",
    "ax2.tick_params('y', colors=sns.color_palette()[1])\n",
    "# The function at mu\n",
    "f_at_mu = f(mu)\n",
    "# The first derivative of the function at mu\n",
    "df_at_mu = scipy.misc.derivative(f, mu, dx=1e-8, n=1)\n",
    "# We can now construct a Gaussian approximation to the distribution of f(X)\n",
    "exp_f_X = f_at_mu\n",
    "var_f_X = f_at_mu ** 2 * sigma ** 2\n",
    "f_X = st.norm(loc=exp_f_X, scale=np.sqrt(var_f_X))\n",
    "# We will compare to the histogram of 10,000 samples\n",
    "y_samples = [f(X.rvs()) for _ in range(10000)]\n",
    "fig, ax = plt.subplots()\n",
    "y = np.linspace(exp_f_X - 6 * np.sqrt(var_f_X), exp_f_X + 6 * np.sqrt(var_f_X), 100)\n",
    "ax.plot(y, f_X.pdf(y))\n",
    "ax.set_xlim(0., 0.6)\n",
    "ax.hist(y_samples, bins=10, normed=True, alpha=0.5);\n",
    "ax.set_xlabel('$y$')\n",
    "ax.set_ylabel('$p(y)$');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Perturbation Approach in Many Dimensions\n",
    "\n",
    "Let $X\\sim\\mathcal{N}(\\mu,\\Sigma)$ be a d-dimensional Gaussian random vector.\n",
    "If $X$ was not Gaussian, we could use the Laplace approximation.\n",
    "Let $f(x)$ be a m-dimensional function of $x$:\n",
    "$$\n",
    "f:\\mathbb{R}^d\\rightarrow \\mathbb{R}^m.\n",
    "$$\n",
    "To get the Taylor series expansion of $f(x)$, you need to work out the Taylor series expansion of each output component and put everything back together.\n",
    "You will get:\n",
    "$$\n",
    "f(x) = f(\\mu) + \\nabla f(\\mu) (x - \\mu) + \\dots,\n",
    "$$\n",
    "where $\\nabla f(\\mu)\\in\\mathbb{R}^{m\\times d}$ is the Jacobian matrix defined by:\n",
    "$$\n",
    "\\nabla f(\\mu) = \\left(\n",
    "\\begin{array}{ccc}\n",
    "\\frac{\\partial f_1(\\mu)}{\\partial x_1} & \\dots & \\frac{\\partial f_1(\\mu)}{\\partial x_d}\\\\\n",
    "\\vdots & \\ddots & \\vdots\\\\\n",
    "\\frac{\\partial f_m(\\mu)}{\\partial x_1} & \\dots & \\frac{\\partial f_m(\\mu)}{\\partial x_d}\n",
    "\\end{array}\n",
    "\\right)\n",
    "$$\n",
    "\n",
    "To first order, the expectation of $Y = f(X)$ is:\n",
    "$$\n",
    "\\mathbb{E}[f(X)] \\approx f(\\mu),\n",
    "$$\n",
    "while the covariance matrix is:\n",
    "$$\n",
    "\\mathbb{C}[f(X)] \\approx \\nabla f(\\mu)\\Sigma \\left(\\nabla f(\\mu)\\right)^T,\n",
    "$$\n",
    "\n",
    "Putting these two things together, we may approximate the density of $Y=f(X)$ with a multivariate Gaussian:\n",
    "$$\n",
    "p(y) \\approx \\mathcal{N}\\left(y|f(\\mu), \\nabla f(\\mu)\\Sigma \\left(\\nabla f(\\mu)\\right)^T\\right).\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Perturbation Approach for Stochastic Dynamical Systems with Low Dimensional, Small Uncertainties\n",
    "Potentially using the Laplace approximation, assume that we have a $d$-dimensional random vector:\n",
    "$$\n",
    "X\\sim\\mathcal{N}(\\mu, \\Sigma).\n",
    "$$\n",
    "Consider the $m$-dimensional dynamical system:\n",
    "$$\n",
    "\\frac{dy}{dt} = g(y;X),\n",
    "$$\n",
    "with initial conditions\n",
    "$$\n",
    "y(0) = y_0(X).\n",
    "$$\n",
    "Since $X$ is a random vector, the response of the dynamical system $Y(t)$ is a stochastic process:\n",
    "$$\n",
    "Y(t) = y(t; X),\n",
    "$$\n",
    "where $y(t;X)$ is the solution of the initial value problem for a specific realization of the random vector $X$. \n",
    "We will approximate this stochastic process with a Gaussian process:\n",
    "$$\n",
    "Y(\\cdot) \\sim \\mbox{GP}\\left(m(\\cdot), k(\\cdot, \\cdot)\\right).\n",
    "$$\n",
    "This can easily be done, using the results of the previous sections.\n",
    "The mean is:\n",
    "$$\n",
    "m(t) = \\mathbb{E}[Y(t)] = \\mathbb{E}[y(t;X)] = y(t;\\mu).\n",
    "$$\n",
    "The covariance between two times is:\n",
    "$$\n",
    "k(t,t') = \\mathbb{C}[Y(t), Y(t')] = \\mathbb{C}[y(t;X), y(t';X)] = \\nabla_x y(t;\\mu) \\Sigma \\left(\\nabla_x y(t';\\mu)\\right)^T.\n",
    "$$\n",
    "The only complicating factor, is that we need a way to get $\\nabla_x y(t;\\mu)$.\n",
    "For this, we need the method of adjoints."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Calculating Sensitivities in Dynamical Systems using the Method of Ajdoints\n",
    "We will show how we can compute $\\nabla_x y(t;\\mu)$ using the method of adjoints.\n",
    "The idea is simple.\n",
    "We will derive the differential equation that $\\nabla_x y(t;\\mu)$ satisfies and we will be solving it as we solve for $y(t;\\mu)$.\n",
    "Let $i\\in\\{1,\\dots,m\\}$ and $j\\in\\{1,\\dots,d\\}$.\n",
    "We start with the initial conditions.\n",
    "We have:\n",
    "$$\n",
    "\\frac{\\partial y_i(0;\\mu)}{\\partial x_j} = \\frac{\\partial y_{0i}(\\mu)}{\\partial x_j}.\n",
    "$$\n",
    "Now, let's do the derivatives:\n",
    "$$\n",
    "\\begin{array}{ccc}\n",
    "\\frac{d}{dt}\\frac{\\partial y_i(t;\\mu)}{\\partial x_j} &=& \\frac{\\partial }{\\partial x_j}\\frac{dy_i(t,\\mu)}{dt} \\\\\n",
    "&=& \\frac{\\partial }{\\partial x_j} g_i(y(t;\\mu); \\mu)\\\\\n",
    "&=& \\sum_{r=1}^m\\frac{\\partial g_i(y(t;\\mu); \\mu)}{\\partial y_r}\\frac{\\partial y_r(t;\\mu)}{\\partial x_j} + \\frac{\\partial g_i(y(t;\\mu); \\mu)}{\\partial x_j}.\n",
    "\\end{array}\n",
    "$$\n",
    "\n",
    "So, we see that the dynamical system that $\\nabla_x y(t;\\mu)$ satisfies is:\n",
    "$$\n",
    "\\frac{d}{dt}\\nabla_x y(t;\\mu) =  \\left((\\nabla_y g(y;\\mu)\\right)^T \\nabla_x y(t;\\mu) + \\nabla_x g(y;\\mu),\n",
    "$$\n",
    "with initial conditions\n",
    "$$\n",
    "\\nabla_x y(0;\\mu) = \\nabla_x y_0(\\mu).\n",
    "$$\n",
    "This is known as the *adjoint dynamical* system."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "### Example: Dynamical System with Uncertain Paramters\n",
    "\n",
    "Take the random vector:\n",
    "$$\n",
    "X = (X_1, X_2),\n",
    "$$\n",
    "and assume that the components are independent Gaussian:\n",
    "$$\n",
    "X_i \\sim \\mathcal{N}(\\mu_i, \\sigma_i^2).\n",
    "$$\n",
    "So, for the full random vector we have a mean:\n",
    "$$\n",
    "\\mu = (\\mu_1, \\mu_2),\n",
    "$$\n",
    "and a covariance matrix:\n",
    "$$\n",
    "\\Sigma = \\operatorname{diag}(\\sigma_1^2,\\sigma_2^2).\n",
    "$$\n",
    "\n",
    "Consider the ODE:\n",
    "  \\begin{align*}\n",
    "    &\\dot{y} = \\frac{d y(t)}{dt} =-X_1y(t) \\equiv g(y,X),\\\\\n",
    "    &\\qquad y(0) = X_2 \\equiv y_0(X).\n",
    "  \\end{align*}\n",
    "The adjoint system describes the evolution of the derivative:\n",
    "$$\n",
    "\\nabla_x y(t;\\mu) = \\left(\\frac{\\partial y(t;\\mu)}{\\partial x_1}, \\frac{\\partial y(t;\\mu)}{\\partial x_2}\\right).\n",
    "$$\n",
    "According to the formulas, we wrote before we need:\n",
    "$$\n",
    "\\nabla_x y_0(\\mu) = (0, 1),\n",
    "$$\n",
    "$$\n",
    "\\frac{\\partial g(y;\\mu)}{\\partial y} = -\\mu_1,\n",
    "$$\n",
    "and\n",
    "$$\n",
    "\\nabla_x g(y;\\mu) = (-y, 0).\n",
    "$$\n",
    "\n",
    "Putting everything together, the adjoint dynamical system is:\n",
    "$$\n",
    "\\begin{array}{ccc}\n",
    "\\frac{d}{dt}\\frac{\\partial y}{\\partial x_1} &=& -x_1 \\frac{\\partial y}{\\partial x_1} - y,\\\\\n",
    "\\frac{d}{dt}\\frac{\\partial y}{\\partial x_2} &=& -x_1 \\frac{\\partial y}{\\partial x_2},\\\\\n",
    "\\end{array}\n",
    "$$\n",
    "with initial conditions:\n",
    "$$\n",
    "\\begin{array}{ccc}\n",
    "\\frac{d}{dt}\\frac{\\partial y(0)}{\\partial x_1} &=& 0,\\\\\n",
    "\\frac{d}{dt}\\frac{\\partial y(0)}{\\partial x_2} &=& 1.\n",
    "\\end{array}\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Let's extend the solver object we had before so that it also gives the adjoint solution\n",
    "import scipy.integrate\n",
    "\n",
    "class Ex1Solver(object):\n",
    "    \"\"\"\n",
    "    An object that can solver the afforementioned ODE problem.\n",
    "    It will work just like a multivariate function.\n",
    "    \"\"\"\n",
    "    \n",
    "    def __init__(self, nt=100, T=5):\n",
    "        \"\"\"\n",
    "        This is the initializer of the class.\n",
    "        \n",
    "        Arguments:\n",
    "            nt - The number of timesteps.\n",
    "            T  - The final time.\n",
    "        \"\"\"\n",
    "        self.nt = nt\n",
    "        self.T = T\n",
    "        self.t = np.linspace(0, T, nt) # The timesteps on which we will get the solution\n",
    "        # The following are not essential, but they are convenient\n",
    "        self.num_input = 2             # The number of inputs the class accepts\n",
    "        self.num_output = nt           # The number of outputs the class returns\n",
    "    \n",
    "    def __call__(self, x):\n",
    "        \"\"\"\n",
    "        This special class method emulates a function call.\n",
    "        \n",
    "        Arguments:\n",
    "            x - A 1D numpy array with 2 elements. This represents the stochastic input x = (x1, x2).\n",
    "        \"\"\"\n",
    "        # The dynamics of the adjoint z = y, dy/dx1, dy/dx2\n",
    "        def g(z, t, x):\n",
    "            return -x[0] * z[0], -x[0] * z[1] - z[0], -x[0] * z[2]\n",
    "        # The initial condition\n",
    "        y0 = (x[1], 0, 1)\n",
    "        # We are ready to solve the ODE\n",
    "        y = scipy.integrate.odeint(g, y0, self.t, args=(x,))\n",
    "        return y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "mu = np.array([0.05, 8.])\n",
    "Sigma = np.diag([0.01 ** 2, 0.01 ** 2])\n",
    "solver = Ex1Solver(nt=500, T=100)\n",
    "z_at_mu = solver(mu)\n",
    "y_at_mu = z_at_mu[:, 0]\n",
    "grad_x_y_at_mu = z_at_mu[:, 1:]\n",
    "C = np.dot(grad_x_y_at_mu, np.dot(Sigma, grad_x_y_at_mu.T))\n",
    "\n",
    "# For comparison, let's compute the mean and the variance with 1,000 LHS samples\n",
    "import pyDOE\n",
    "num_lhs = 1000\n",
    "X_lhs = pyDOE.lhs(2, num_lhs) # These are uniformly distributed - Turn them to standard normal\n",
    "X_samples = mu + np.dot(st.norm.ppf(X_lhs), np.sqrt(Sigma))\n",
    "s = 0.\n",
    "s2 = 0.\n",
    "for x in X_samples:\n",
    "    y = solver(x)[:, 0]\n",
    "    s += y\n",
    "    s2 += y ** 2\n",
    "y_mu_lhs = s / num_lhs\n",
    "y_var_lhs = s2 / num_lhs - y_mu_lhs ** 2\n",
    "\n",
    "# Make the figure\n",
    "fig1, ax1 = plt.subplots()\n",
    "\n",
    "# Plot the mean and compare to LHS\n",
    "ax1.plot(solver.t, y_mu_lhs, color=sns.color_palette()[0], label='LHS mean ($n=%d$)' % num_lhs)\n",
    "ax1.plot(solver.t, y_at_mu, '--', color=sns.color_palette()[0], label='Perturbation mean')\n",
    "ax1.set_xlabel('$t$')\n",
    "ax1.set_ylabel('$\\mu(t)$', color=sns.color_palette()[0])\n",
    "ax1.tick_params('y', colors=sns.color_palette()[0])\n",
    "plt.legend(loc='upper right')\n",
    "\n",
    "# Plot variance and compare to LHS\n",
    "ax2 = ax1.twinx()\n",
    "ax2.plot(solver.t, y_var_lhs, color=sns.color_palette()[1], label='LHS variance ($n=%d$)' % num_lhs)\n",
    "ax2.plot(solver.t, np.diag(C), '--', color=sns.color_palette()[1], label='Perturbation variance')\n",
    "ax2.set_ylabel('$\\sigma^2(t) = k(t, t)$', color=sns.color_palette()[1])\n",
    "ax2.tick_params('y', colors=sns.color_palette()[1])\n",
    "plt.legend(loc='center right');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, '$y(t)$')"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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kpKsO+f4G93777/f4fiOHTsAcyZgtp3zsex2e0Ln2NvfcVm4105OTg6PPvooDQ0NKIrCE088wQsvvMDq1auZNGlSupvXK3V1ddxwww0MHTqUW2+9lbq6OiorK9v+s9lsTJs2jd/97nds3bqVvLw83nrrLe677z4uv/xyVqxYke5T6LaCggKGDh3a4b8tW7ZQXV3NqlWrcDqdDBs2jF/96lfs378fp9PJunXreOyxx/jud7/L6aefnu5T6DZFURg8eDBPPPEEn3/+OR6Ph/Xr1/Pwww9z7bXXsmTJkqw75yFDhvDJJ5/w9NNP43A4CIVCbNy4kQceeIAzzjiDb3zjG1l3znv27OGNN97osHAvkXMcN25c737He7qIJFs988wzxpIlS4wZM2YYy5cvN1544YV0NykpXnjhBWPy5Mld/rdu3TrDMAzj/fffNy6//HJjxowZxsKFC40HHnjACIfDaW598tx2220dFu4ZhmG89tprxkUXXWRMnz7dOO+884zf/va3aWpd8rz++uvGpZdeasyYMcNYtGiR8cgjjxixWKzt9mw751AoZDzwwAPGokWLjBkzZhhLly41/vu//7vDArVsOufnn3/+uIV7hpHYOfbmd1wxjHb9FyGEEKILMoYhhBAiIRIYQgghEiKBIYQQIiESGEIIIRIigSGEECIhEhhCCCESIoEhhBAiIRIYQqTB888/z//8z/+kuxlCdIsEhhBpcN999/HOO++kuxlCdIsEhhApVlpaSkNDA7NmzUp3U4ToFikNIkQKfetb3+KNN9447vhNN93UYbc4ITKR7IchRApdeeWV6LrO5s2bWbNmDS6XC4CSkpI0t0yIk5MehhApdtNNN7Fjxw7efffddDdFiG6RMQwhUmz37t1MmzYt3c0QotskMIRIofr6eiorKyUwRL8kgSFECu3atQtAAkP0SxIYQqTQnj17AJg+fXqaWyJE90lgCJFC5eXlAAwfPjzNLRGi+2RarRApNGrUKADuvvtuSkpKUFWVFStWoChKmlsmxMnJtFohUigQCLB69Wr+9re/0dDQwIgRI9i8eXO6myVEQiQwhBBCJETGMIQQQiREAkMIIURCJDCEEEIkRAJDCCFEQiQwhBBCJEQCQwghREIkMIQQQiREAkMIIURCJDCEEEIkRAJDCCFEQv4/zqSnHp3Zx6oAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Let's do 95% intervals\n",
    "s = np.sqrt(np.diag(C))\n",
    "l = y_at_mu - 2 * s\n",
    "u = y_at_mu + 2 * s\n",
    "fig, ax = plt.subplots()\n",
    "ax.plot(solver.t, y_at_mu)\n",
    "ax.fill_between(solver.t, l, u, alpha=0.25)\n",
    "ax.set_xlabel('$t$')\n",
    "ax.set_ylabel('$y(t)$')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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SI5r19Jeo0IFYMECIDBQuraIiIxI74V7AHD9+nW0b98erVq1go2NDc6fP487d+7IhdR1AwC6du2K2bNn56hgW7duxXvvvYeKFSti3759Br8/T82SUp06Bfj7A6VLS6CYPx/44w/ghx90Xzd9OnDyJLB5c9prKArQr5+kFQkNNU25ichqZFZ3GpQapFKlSmjbti169+6NFi1aAAAePHiAyMhInD9/Hjdu3ICbmxuCgoJyVOC7d+/i008/RZkyZXJ0nTzHy0tySl25AuzaJft+f/YZEBGhO5323XcBDw95TUCA7jU0GtlsycsL2LZNWi1EREZgUAvDVIYOHQonJyfY29vjxIkT+aeFAcgsqFGjgKpVgQMHgM8/l66pbdt0X7dzp4xznDsH2Nunvc6RI5I25MQJST9CRKSHHK3DMLVNmzYhMjISH374obmLYh4BAbIb3/nzshZD3ef72DHd13XsKAPg8+alf51mzaSFEhSUNkU6EVE2ZBkwfs/B7m5Hjhwx6PU3b97ErFmzEBISgmLFimX7c/M0GxvgnXeA4sWB2bNln+/335eFe6mpA+B//ZX+taZOlXUZGQUVIiIDZBkwgoODERQUhAMHDiBJj2+qL168wL59+9C/f38MGzZM74IoioKpU6eiZcuWaN++vd7vs0oDBsiWrb/8Il1OgwfLKu5ff9V9XeXKwAcfyGZMyclpr2NrC3z3nUy1PXzYJEUnIuuV5aD35s2bMXv2bIwcORKurq5o1qwZ6tWrh4oVK8LFxeVlttrr168jIiICR48exePHj+Hj44MtW7boXZB169YhKioK27dvR+J/q5XV4ZXExETY2trqzMSyaoUKSXfS9u0yI+r77+XxvfdkQV/K38OYMTINd+VKWcuRWoUKst9Gnz4ynlG6tOnug4isit6D3qdOncL69euxf/9+PH36NE3lrSgKnJyc4O/vj759+6JevXoGFWTAgAE4lrqfPoVZs2ahR48eel8vzw56q+7dk61YbWykZVGrFtCoETBlimzTmtLZs0CbNrJgL3UKdNWHH8pA+N693HCJiDKUo2y1qSUlJSEyMhKXLl3C/fv3dXbcq127NmyymWL7ypUriIuL0zkXGhqKCxcu4IsvvoCbm5tBCwLzfMAAJK35r7/KjKl162S21PDhMiBesKDuaz/6SALHjz/qtkBUSUlAu3aSRn3GDNOUn4jyHKOtwwAAW1tb1KtXz+AWRFaqVq2a5lzRokVRsGBB1K1b16iflWdMmAB89ZVslBQVBbRtK2nOly9Pm8r8/fdlrcaPP8q2rqnZ2krXVcOGEjQ6dTLNPRCR1TC4OTBz5kzExsbmRlkotdKlZVrsK69o80rNmSM/P3yo+1p7exnHGDNGurPSU6qU7LUxeHD6qUWIiDJhcJeUh4cHnJ2dMXbsWPTu3dtiB6KtoksKkJTmdetKC+H332VcY8gQqfxnzUr7+gkTgJs3JTBk9Hfz2WfSxXX4sKz5ICL6j1EX7m3btg0eHh6YNm0aunXrhj/++CPnJaSMubnJbnoeHtq1GJ98Il1VV6+mff3MmTIVd+PGjK85fjxQs6YEHstb6E9EFsrggFG1alWsWLECy5cvR3x8PN588028/fbbuHnzZm6UjwAZ/D57VlKFnDolqT4mTJAjtUKFgG+/lbQhN26kfz2NBvj6axkb4f4ZRKSnbKcGadWqFX766SdMnDgRR44cQceOHbFw4UI8ffrUmOUjAKhSBejaFWjQQFZvA7Ia/MwZ3b2/VQ0byljG4MEZtyAKFwa2bAEWLwZ27Mi9shOR1chRLik7OzsMGTIEe/fuRefOnbFixQq0b9/eoAV7pKePPpJU5+fPAwcPSkti4UKZLfX8edrXT5kCPHoELF2a8TXd3CR1+uDBwIULuVZ0IrIORkk++OjRI3h7e6Nhw4b4559/MGXKFPTq1QtnzpwxxuUJkDQg/fpJwsEpU6Tl0KWLtD6WLEn7ejs7YO1aYNo0mZKbkaZNJdfUa68BDx7kVumJyAoYPEvqn3/+wZkzZ3DmzBmcPXsW586dw5MnT+RiGg3c3d1Rr149HDt2DDdv3sSgQYMwceJEk8+msppZUinduQPUrg2UKSMzpLp2lWDg4yNjHGXLpn3Pl1/K/hhHj0qrJCMTJshK8V270i4KJKJ8w6grvWvVqgWNRgNFUeDi4gJPT0/Ur18fXl5eqFevHhwdHQFI/qevv/4aixcvfhk0TMkqAwYgrYuICOD6dRnDsLOTHFO3bkmiwdQUBejVS9Z0fPFFxtdNSgK6dwdcXYE1azKekktEVs2oAeOjjz5CgwYNUL9+fVSpUiXL1y9YsACbN2/GYRNnS7XagHH/vqzFqFFDstqOGgXExsq02xUrZIvX1B4+lAHzefPSXwWuiosDWreWPTk+/jj37oGILJZR12F88skn6Natm17BApAWyb///mvox1BGihWTdRRFi0ql/uAB4OQkg9sjRgDpzVIrWlTWZYwcmfkKb0dHyZC7dq1kuCUiSiHXd9zz9fXFggULcvtj8pdx42S8wcdHFvEBsgNf48baP6fm7S3rOfr0AV68yPjapUvLOMaUKelP2SWifCvXA4aLiws6MdGdcTk5SWBQxy3+/FPOL1oErFolYxvpGT8eKFECmDw58+vXrCnTbfv3l8BERAQL3NOb9DRoEPDsmbQs1AkFZcpIYsKhQ9Pfx9vGBvjmG2DzZtmUKTO+vkBoqFz/0iXjl5+I8hwGjLzK1laSCB46JC2MPXvk/JAhMn3288/Tf1/x4pICffRomYqbmZ49gZAQGUhn6heifI8BIy9r21ZmRzVvLqlA4uOlFbFqlSQhVLuqUvP0lFXi3btnvVhv2DAZTPf3Bzh5gShfY8DI6+bNk5lN1appEwm6u8sYx8CBwH/7o6fRv79sotS/P5CcnPlnTJokiwQDAoDHj41bfiLKMxgw8rqaNYHAQFlwt3gx8Ndfcn7ECMDZWQJKRubPlzUcISFZf87MmbKneNeuMnZCRPkOA4Y1mDYN+PlnCRxvvSWru9Wuqc8+y3isokAB4P/+T9ZdbNiQ+WdoNLJSvGxZoEcP6f4ionyFAcMauLpKd9ShQ8Ddu9oZUBUrypauQUFAQkL67y1dGti2TbLeHjmS+efY2speG87ODBpE+RADhrXo318qcj8/SSSo7vk9aJBkulX30UhPvXoy3fb119PfxS8lOzvZ3tXJSV6fUSAiIqvDgGEtNBpJD/LttzKjSV2boe6ut2mTrODOSMeOwPvvA507yz4amSlQQIKGg4O0NBg0iPIFBgxrUqeObIYUHw+EhQG7d8v5YsVknGLwYEmRnpHRo4E2bWT9RWbpQwAJGuvXy859bGkQ5QsMGNbmww9l74tRo2QNhdpaaNlSVoAHBWU+jXbhQsDeXhYAZjXdtkABGSwvXFg2c4qLM959EJHFYcCwNk5OsmHSsmUynpFyH5KPPpJKPbOptnZ2Mmh++bLss5EVNWiULw+0a6cdOyEiq8OAYY06dgRatJDKfN8+bdoQOzup3BcuBA4cyPj9Dg6yGHD37syDi8rOTsZJGjUCWrUC/v7bKLdBRJaFAcNaLVwI7NghKUOGDtWmAKlYUcYz+vXLPD9UsWISMEJDZQe+rNjYSLbcbt0kVUl0tFFug4gsBwOGtSpWTGZNLV8uM5+GD5cFfYDMoho9Wga3nz/P+BpubhI0Jk8Gtm7N+jM1GllEOGKEBI0LF4xyK0RkGRgwrFnXrrKpUoECkogwZUthyhTZGyOrvdZr1QJ++kkG0Hfu1O9zx4+XXFatWsliQiKyCgwY1m7xYtkMafx4GcRWc03Z2MiajZ075TEzDRvKavA339R/F76BA2Vzp9dfz3rvDSLKExgwrF2JEjIgHRIiAaNfP203VNGiEggmTgR++y3z6zRpIvtoBAZK3ip9+PvLepB335VEh2qXGBHlSQwY+UGHDrL3xbFjsivf++9rn6tdW9KCvPEGcO1a5tfx9ZUV4717A7/+qt9n16snOaq+/VbyVWWUbp2ILB4DRn4xZ46MY7RvL5X+5s3a5wICZM+L114DnjzJ/DqtWgEbN0pXU1iYfp/t5iZjGVFRMgDPtRpEeRIDRn5RqJCk8vj4Y0l5Pny4djwDAMaOBV59VbqssmoFtG0r3VP9+sl6DX24uMh4Sa1a0r0VFZX9eyEis2DAyE/q1pXV3jNnSgqR118Hnj6V59T9LuLjtXtqZKZ5c5k9FRys/6C2nZ2s1XjvPXm/uqCQiPIEBoz8ZvRooEoV4Nw52dt7xAhtcChYUFoOx48D06dnfa3GjWUl+fjxwOrV+pdhyBD5nEGDgAULOBhOlEcwYOQ3arrzgwclfUhEBLBkifZ5Z2fpOlqzBli5Muvr1asnaUamTZNxEn0rf19fSZK4fj3Qp0/WYydEZHYMGPlRkSKyNmPKFNmpb9YsbSp0QGZS7d4t3Vb6jFHUrCkzodatk5lQSUn6laNiRZnOW7SotFYiI7N3P0RkEhYVMJKTk7FhwwZ06dIFXl5e8PPzw6xZsxAbG2vuolmfunVl8Pvtt6U7KShIN5VHjRqyRmPIEOl2ykr58jITKjJSUo48e6ZfOQoVAr78UnYEbNVKFvsRkUWyqICxcuVKTJ8+Ha1atUJoaCgGDRqELVu2YOzYseYumnUaMEAW1y1ZAsyeLXta3Lunfb5xY+1sqF9+yfp6Li6yq1+hQnLdlNfKSlCQLAj85BMZV9E34BCRyVhMwFAUBStXrkTv3r3xzjvvoFmzZggMDERISAgOHz6MC0xklzsWLZKZUZGRst1q6t3zfH1lFlTPnsDvv2d9PXt7aSX4+gLe3oZ1M9WtC4SHA48fS6r0M2cMvx8iyjUWEzDi4uLw2muvoXPnzjrnq1atCgCIZrrs3FGggCzk27ZNuqFKlEi7K1+bNrJSu2tX4MSJrK9pYyMtlmnTgNatJc26vooUkbGQyZNlvceiRVnv/EdEJmExAcPJyQkffPABGjZsqHM+7L/VxNWqVTNHsfKHYsVkcHvqVOkOunNHpsqmnPHUoQOwYoVsznTsmH7XHTBAAtHw4bIRk74zqDQaee8ff8iq8o4dM9+LnIhMwmICRnpOnz6Nr776Cn5+fnB3dzd3ceYZmvsAACAASURBVKxbrVrSldS/vyQK/PlnmUGVUteuMiW3c2f9c0m9+qpMn924UTLYGjI2UbWqDKQ3bgx4eem3JwcR5RqLDRgnTpxAcHAw3NzcMGPGDHMXJ39o1w749FNJLvjNN7IBU+oFeZ07yzavr7+u/0rtChWk4k9MBJo21U1JkpUCBWQR4aZNklU3MNCwwXQiMhqLDBg7d+7EoEGDULZsWaxZswaurq7mLlL+MWQIMHiwPP7vf5LZduNG3de0bQts2SLdRlu26HddBwcZmxg+HPDxkdlXhvD1BU6fBkqXlsHxlMkTicgkLC5grF69GhMmTICnpyfWrVuHUqVKmbtI+c/77wPNmsnA844dwLhxEjxS8vGRKbQjRkg3lT40GmDkSFlJ/s47Mk6S2RaxqTk4yNqRTZsku27fvsC//+r/fiLKEYsKGJs2bcLs2bMREBCAlStXwtnZ2dxFyp80Gtmpr2hRWQW+fTswalTaVd8NG8r6jJkzZYMmfQe1GzUCTp4ELl0CWrYErlwxrHw+PtLaKF8e8PCQ7jPmoyLKdRYTMO7du4dPP/0U5cuXR2BgIM6fP4+IiIiXx/37981dxPzF1la6kGJjZWrr1q3STZV6iqyaFmTXLkkmqG+LwdVVrtmrl6Q7N7TSL1xYBud37JCFh61bA+fP6/9+IjKYxQSMQ4cO4dmzZ7h58yYCAwPRu3dvnePQoUPmLmL+Y28vYw1370r6ju3b009nXrq0JCC8fx/o1Al49Ei/69vYSLfU/v1S+ffqZfiAdqNGMv22Z09prUydqk3ZTkRGpVEU62zLN2rUCAAQHh5u5pJYgbg42ZWvVi3ZK6NjR0nhMWSI7usSE2W8Y/9+aT3UqKH/Z8THS2W/aROwapWkFjHU7dvAhAkyjfezz4Bu3aR7jYj0llndaTEtDLJgjo6yWVJkpHT/hIVJwPj8c93X2dnJJkzjx8uspl279P+MQoWkkl+9WgLR0KGGb+VatqxM+V2xQjaKatMGOHXKsGsQUYYYMEg/zs6y7uLqVQkW+/dLcEhvsHvYMJn2OmSIpAgxpBHr5yebO9nZyYD2tm2Gl9XPTwJF797SMhoyRFofRJQjDBikPycnaWk8eSJdP2Fhsm/GwIFpB7t9fCSFyP/+J2MT+o5rAJJPatkyWXk+YYJssPT334aV1c5OpvxGRQHFi0vwmTmTWXCJcoABgwxTqJAMhBcqJN/ct26VANKhA/Dgge5r3dxkhXfJkjIFV5/EhSm1aiUZaytUkAp/+XL9N2dSubhIipNjx+Tzq1eXAfwXLwy7DhExYFA2FCwoYwU1akg6kUWLgPr1ZbHf1au6ry1USFKMzJwp3UNLlhjWReXgIIkL9+2Tab5Nmuif/DAld3dp7fz4ozy+8opcz9AARJSPMWBQ9tjaAqGhkh7E11e6pUaOlFxRBw6kfX2vXrKfxjffSB4qQ1do168vCQ/HjpXZT0OHZm+Vt7c3sHevDIyHhgKenpLexDonCxIZFQMGZZ9GA7z7LrBggUyDrVlTxh369pUZT6krYXd32cPb3V0CgCH7ZKifN2CAbCXr4CCthLlzZUquoVq3lrKo+3Y0aiQtD+69QZQhBgzKuV69ZFbUwIGy2vr33yVw9OsnazhSsreXLqYNG2Q/8eBg2WHPEC4uMqX38GH5rJo1pXvJ0Mpeo5GFhidPyjTcOXNkrGTtWllTQkQ6GDDIOHx9JUXIqlUy1TYsTMY6mjYF/vwz7etbtJB8UDY20trYu9fwz6xZUwLVd99J7qvGjdPvDsuKjY3s9fHHH3KdVatkfGb58uy1XoisFAMGGU/VqhI0kpJkLcS0acDo0UDz5sDKlWm7qJydga++kim0w4fLXhd37xr+uc2by+ru996TFoufn3Q3GUqjkfceOCBBaPt2oEoVWXdi6LReIivEgEHG5eAgle2AAdK6qFRJMtouXixdV6mn3gIyJffcOck+W7euBJfsdC/17i2tmb59Jfi0ayddVtnRrJmsOQkLA27ckNbMkCHA2bPZux6RFWDAIOPTaCQ9yPffyzf+r7+W9Rhly8qspIMH077H0VEGsPfulVZHq1ZARIThn12ggFTsFy8Cb7whi/46dJCWT3bUqSPluXhRWhvt28sA/44dnJJL+Q4DBuWeli2l0r98WfI6jR4tazL695f9NZ48SfseT09pFfTtK5XzsGHZ66YqWFDee/GiTMMNDJSuq+3bszcTqmRJ4IMPZJ3JgAGybWzVqsCMGUw7QvkGAwblruLFtXmlfHyAO3ekWyc+HqhXT7p8UrO1lTUdUVEyzlGnjrQ+EhIM/3x7e0kR8tdfkmk3JERmQq1enf3rBQXJAPnmzUBMDFC7tqwt2beP03LJqjG9OZnOuXNS2ZYsKQvnzp+XVoC/v0xpLVEi/fddvCjrPc6eBT7+WKbr2tpmrwyKIokT586V7LsjRsgiwDJlsn9fjx8D69fLrKrHj+Ueg4KkBUKUxzC9OVkGDw/5Zt6ypeSWunZNckUVKSLf0r/8Mv1xgRo1JGfVqlVSKderJ4vssvNdR50JtXev7C0eEyMLAPv1k3GO7FyzSBEJPKdOyX4e9+9LCpMWLWQA35DEi0QWjC0MMo/ISGDwYJlVtXSpZLt96y3pJgoNlRQe6VEU2Wfjgw+k8v/kE9nQKScbJT14AKxZI+VwcpJy9OkjP2fX8+cSkL79Fvj5ZyljYKC0pgoWzP51iXIZWxhkeerUkW/03brJN/H166WCHT1aO0h97Vra92k0UvmGh8sOfVOmAF5ewMaN2V+d7eoqs7qiooBZs2QPjgoVJKAdOpS9VkfBgnIfP/4IXLok03RnzZKZYoMGSdDTd/9zIgvBgEHmY2sryQTPnpXB8Dp1JLttVJR0QzVsCLzzjnTxpGZjIwPNp08Dn34qrZKaNXO2OtvGRqbgbtsm4yuvvCILCmvWlGy7N25k77olSkggPHxYylu/vsyyKltWJgPs2cN065QnMGCQ+ZUpI1lsN2yQb+EdOkjXTWQk8PSpVNhz5gCxsWnfq+aDOnRIrrFjh3Z19p072S9T2bIy0B4ZKbmloqNl7KRNG1mXce9e9q7r5ib7nh85IlOOPTxkRXyZMtKq2rjR8K1piUyEAYMsh6+vbHI0bJiMIYwaJZXroUNSubq7S0DJKFmhr68EjH37gFu3cj6YDUhAatJEWi43bwJjxsgsq6pVpWvsm2+yP6hdoYJ0hf3+uwz+t2ghwaliRaBtW0mweOVK9q5NlAsYMMiy2NpK1tuoKODVVyUIzJ8v3U4HD0pXkbu7dOlk9E1c3Z3v6lUZPB84EGjQQKbyGpoZN6XChYHu3WUF+82bMnV282ap4Lt1k4Hz7OzRAUhalOHDJR3J7dsSmM6ckfQqdepI19zu3dLiIjITzpIiy3b/vuzot3Qp0LmzDHRrNBJAtm2TSvvttzNf85CcLNNoly+XoNO1qww8t2gh4xY59fChrCDfulVaN/XqyWe89pqMxeREcrLsMLh3r1z71Clp8bRrJ912np7GuQei/2RWdzJgUN7w8KEkMFyyRFKGTJoks5tCQ2WtQ/Pm0r3j65v5FNu//5bkiKtXy14db74pYwfu7sYpZ3y8ZLvdulUCWpEiQJcuUsE3by6D+jnx+LEEvX37JIg8eCDdV61aSQCsVStnU4wp32PAIOvx+LEEiSVLpKtm/HipiNeulZaIg4OMgQQGykZLGVEUGS9Zs0YW21WoINl0e/UCKlc2TlmTk2VzJnVc5cwZSY/Svr0EkNq1c165R0fLtX/9VY64OPl9tGwpAaRu3eyviqd8iQGDrM/z5zKWsHCh9OuPHStB4tgxmcW0d6+MKwwbJuMAmVXMiYlS2X7/vaybqFpVAkePHjLjylgePpRFfHv2yJGYKLOuWrSQCr5aNeMEkEOHJKX8r79K4sZmzeR30KSJbDJVtKhx7oesEgMGWS9FkQpy0SLpCnrjDckNVamStDq++kpSngcGSgbcrALAixdynf/7PxmXKFlSxk66dJFBeGN9W1cUWdB34IBU7r/8Ii0SNXi0bCmzvHIaQO7elfUfR49KWpaTJ6U19eqrEkCaNJFWiJ2dce6L8jwGDMofbt+WLqaVK2V/jaFDZVOlixdlJfkPP8i3+L59pQVRunTm11MHnHfskOBx6xYQECBHmzZZv98QiiKzutTg8csvkv5drdSbNJEZX66uOfucxERJAvnHH9ogEh0tiwm9vOTw9JSZZvb2xrk3ylMYMCh/SU6WgeGvv5Zpqk2bSpDo1EkCwPr1EgAaNpTZTF27SoskK9evS/DYu1cq9IoVJZFh27bSMnB2Nu593LqlW7GfOCHTb9XWQePGUrHndCD90SOZfZXyuHRJZnh5emoDSf367M7KBxgwKP+Ki5PZShs2SCXfrp20Llq0kIp461YJHm5uMubx2mtSSWbVFZSYKPms9u+XPT2OH5f3NW8uA9vNmgHFihn3XhITZeW5GkDCw2Wfj+rVtRW7p6ccOW2JxMdLS+TUKVk0eeqUpHBRMwvXqaP7mNPPI4vBgEEEyJqOH36Q1OhHjsgU3K5dZcX2tWvaqbBPnsgah3btpAVRtmzW1376VMYKfvtNjmPHJAg1ayYBxMdHKnZjT3mNj5cgolbqERGSr6p4cW3XUu3actSsKYsPsys5WdLBnz8vn5nyUd3oqnZtmdpbvbocFSpwnUgew4BBlNqjRzJTaetWyRxbrZpMd/Xzk7xOv/wiXU/790ul5+8vA9E+PlIZZyUxUb6R//abBKfffpNA1KCBdIWpR9Wqxg8iycmyLW5EhFTm6nHpknRp1a4tA+pqIKlRI/MpyFlRFAkkkZFyREVJy+evvyRIV62qDSApj3LlGEwsEAMGUWZevJDWwb59ckRFSevD3x9o3VpaDz//LLOxjh6VSrd5c3lN8+Yy/qFPpX/3roxDpDzUINKggbQGPDykMnd0NP59JiZKIEkZRM6fl4q9cGEJmukdxYplP6jFxUmgUgNIyuPhQxkHqlxZe1SqpP25bFkGFDNgwCAyxP37EiDCwuR48EC6lnx9ZbDZ3l7GLA4dkkCj0QCNGukepUrp91l//y1TXU+dkm/n587JrK6yZaWLRw0itWtL5Z2TTZ0yoigSzC5dSv/QaGQlfOXKUsFXqqT7WLx49gLK06cyQ+vaNd3j+nV5fPBAWneVK0v3Xvny0iopX157lCrFhYlGxoBBlBO3b0uXkjpGcf68zBjy9paWQenS2plG4eFyODtLl5OXl7bSd3fXr3JTWwJqF8+5c8CFC3KuSJH0u3fc3XOnVaIoEkAvXZKKPDo67WNCgm4AcXOTgFeunDyWLZu9iv3ZM21AuXFDEj6qx61b8vjggfz+UwaR8uWlW7F0aflc9bFAAeP/fqwQAwaRMcXFaWcpnTwpx61bknRQDRIlSkiXS1SUVPjqJlG1amkDSJ06UtlXqaJfZZacLJ+TXvfOlSsSTCpV0m0BpPzZ1TV38kw9eaININevSxlv3ZJAqz4+eCC/k9SBpFw5qdxLlJBFkiVLyniKvl1Rz5/L9VMGk5s35Xd996604O7elSzCzs4SPFIGEvXnkiWlpVS8uHTBFS+eb7fSzVMBY8eOHVi2bBliYmJQvnx5DB8+HN26dTP4OgwYZFKPHskg84kTEkBOn5Zv5eXKaQeXq1aV7qynT+U5dfzgxg35Vp6yxVCtmrQaKlbUb2ZTcrJUkikr7tStgaQkuZ5aSauVdurD2OtJABknuntXN4ioP9+5IxX6P//IY1ycVNgpg0jqn4sXlzUhrq7yWLRo5qvVk5OlpZQyiKT8+Z9/5Pl797SP9vZpg0jqx+LFJcClPIoUydNjL3kmYOzatQvjx49HUFAQmjdvjrCwMGzcuBGff/45OnToYNC1GDDI7BIT5Zt/6kHmP/+USqVqVQkKlSpJJa3RyDTZO3ckoFy+LN+W1ZZDxYraQ/1zuXLyDVmf1B6PHknwUCvrjA6NRtuNVKKE9lAr8dR/dnU1bgX5/LkEDjWIqIFE/Vmt3B8+lJbLw4dyb46OukEko8ciReT3nfpwctJ2mymKtJzU4JEykKT++dEj3SMuTluW1MEk9aF+rpOTvEf9Wf2zg4PJsw/nmYDh7+8PDw8PLFy48OW5cePGISoqCrt27TLoWgwYZLHU1sDly3JcuaL7GBsrLQ51oNfVVb7t2thIZfrkiVSaMTFSwf/7r7xGbTWUKZP2SPlNObMWi1pR3r6traj//VcqRvXn1H9+/Fg+v1gxbUWYsrLM6GcXF+NVjMnJUm41gGT2+ORJ+kdsrPxu0gsm6uHgkPVRsKD8HpOSpGX1/LmM88TFaYPK48fyqH5ubKw8r/6s/jk+Xq6ZMpik97Ojo/b36OAgXyR69MjWrzKzutNiMo7FxMQgOjoaEyZM0Dnfvn177Nq1CzExMahQoYKZSkdkRDY28h+6XDmZlptabKy0LG7cSP+IiZHKRu2mqV1bvjU7OMhYiEYjFf61a1IhPXwoFZT6rdjWVrdrJXU3i/otvEgR+YyqVaWyVL+Zp+7bT0yUijj1t231m//Dh9pptKmfi4tLv2JUK8DUlWLK5xwdJS1Keoezs/xu0nsuo9ZYcrKUJbOA8uyZdCk+fSq/T/VnfQ6NRluh29tLWezttT87OsrfQcrzBQvK35dGI/9u1O/3ycnaoKQGo8REOV68kOtkM2BkxmICxpX/9i6ukiqbaKX/cvxcvXqVAYPyBycnWZVds2bGr1G7bf7+W1oCf/+te6jPpfxmXbCgNiCola2dnVRm6oykFy/kSEzUfjOOj5fn1W/Atra6AUQNVg4O8g095eHgIK8pVUr3XMrXFCok11S/katHQoL2ePpU+/lxcRKc1Bla8fEZH8+epT2n0WiDh1opFyigPQz5s7293F/K5wsUkN+rra32ULvskpLkd5uywk9OlseUR2Ki9lE9nj/XBgT1eP5c+3tL+dyzZ7nyT9NiAsaTJ08AAE6p5pk7/jdVMDY21uRlIrJYBQtqWyn6UBSpdNUAkrKbRv05ddeI+qh+I09OlkopLk5aLC9eyDfvu3e1FaSdnVSONjZSMafsZlK/HaeuJNUKNL1KU604bWy0FbGdXdrKOWUFbWMjj4ULa8cl1HMpK29AW8aUh3peUXS7lpKTtRW9+nNGh/relId6Xv1dpvdc6p9T/jn1Z6e8lvr7VX/Oycr9TFhMwFCHUjSp+jHV8zZ5eNYBkdlpNNpuHDe3nF1LUeSbemysbitA/bZvyJ9Tf4tO/Wf1W7P6DTvlt+uU36rVgKP+nLKyTa8Cz+icen+pj5T1khpMUp9L73ee1bn0rpXV52g02m6q9K6r/l3nAosJGM7/TeVL3ZKIi4vTeZ6IzEyj0XYnUb5iMV/b1bGL6OhonfPXr1/XeZ6IiMzDYgJGpUqV4Obmht27d+uc37t3LypXroxy+vbVEhFRrrCYLikAeOuttzBlyhS4uLigVatW+Pnnn7Fr1y6ddRlERGQeFhUwevTogefPn2PVqlXYtGkTKlSogDlz5qBjx47mLhoRUb5nUQEDAPr06YM+ffqYuxhERJSKxYxhEBGRZWPAICIivVhcl5SxxMbGQlGUl4m0iIgoa0+ePEmzgFpltS0MGxubDG+aiIjSp9FoMsysYVHpzYmIyHJZbQuDiIiMiwGDiIj0woBBRER6YcAgIiK9MGAQEZFeGDCIiEgvDBhERKQXBgwiItILAwYREemFAYOIiPTCgEFERHphwEhlx44d6NSpE+rVq4eAgABs2bLF3EUymuTkZGzYsAFdunSBl5cX/Pz8MGvWLMTGxr58zdmzZzFgwAB4eXnB19cXn332GV68eGHGUhvX6NGj4e/vr3Pu8OHDeP3111G/fn20adMGq1atMlPpjOf48ePo27cv6tevD19fX0yfPh1xcXEvn7fGe96wYQMCAgLg6emJLl26YNu2bTrPW9M9X7hwAXXq1MGdO3d0zutzjzn5P247bdq0aca4AWuwa9cuvPPOO+jSpQtGjhyJhIQELFq0CNWrV0e1atXMXbwcW7FiBebOnYsePXpg+PDhqFy5Mr755hucPHkSXbt2xfXr19G3b1+4ublh0qRJqFy5MpYtW4b79++jZcuW5i5+jm3duhVffvklXFxcEBQUBAA4efIkhgwZAm9vb4wbNw7Ozs5YvHgxChcujAYNGpi5xNkTERGBgQMHwsPDA5MnT0aNGjWwZs0aXLp0CR06dLDKe/7+++8REhKC7t27Y9SoUUhOTsa8efNQrVo1VK9e3aru+cqVKwgODsaTJ08waNAgODk5AdDv33KO/48r9JKfn58ybtw4nXNjx45VOnToYKYSGU9ycrLSuHFjZdq0aTrnf/rpJ6VGjRrK+fPnlalTpyotW7ZUEhISXj6/bt065ZVXXlHu3Llj6iIb1Z07d5TGjRsrLVq0UPz8/F6eHzhwoNKzZ0+d186dO1dp1KiRzu8hLwkMDFQCAwOV5OTkl+e+++47pW3btsrTp0+t8p579+6tDBgwQOdcv379lP79+yuKYh1/zy9evFC+++47xcvLS/H29lZq1Kih3L59++Xz+txjTv+Ps0vqPzExMYiOjka7du10zrdv3x5XrlxBTEyMmUpmHHFxcXjttdfQuXNnnfNVq1YFAERHR+O3335D69atUbBgwZfPd+jQAUlJSTh8+LBJy2tsH3zwAXx8fNC0adOX5xISEhAeHp7u3/njx49x8uRJUxczx+7fv4/w8HD07dtXZz+YwMBAhIWFwcbGxuruGZC/S0dHR51zRYsWxcOHD63m7/nEiROYP38+Bg8ejIkTJ+o8p+895vT/OAPGf65cuQIAqFKlis75SpUqAQCuXr1q8jIZk5OTEz744AM0bNhQ53xYWBgAwN3dHbdv305z/8WKFYOTk1Oevv9NmzYhMjISH374oc75mJgYvHjxwqr+zi9evAhFUeDi4oJx48bB09MTDRs2REhICOLj463yngEgKCgIhw4dwq5duxAbG4vdu3fj4MGD6Nq1q9Xcs7u7O8LCwjB69GjY2trqPKfPPT579izH/8etdotWQz158gQAXvYHqtRvLSkHhq3F6dOn8dVXX8HPzw9FihQBkPb+Afkd5NX7v3nzJmbNmoVZs2ahWLFiOs9Z49/5/fv3AQCTJ0+Gv78/li1bhqioKCxatAgJCQno3bs3AOu6ZwDo1KkTjh49inHjxr081717dwQHB+PUqVMA8v49lyhRIsPn9Pm3nNFr1Nfp83tgwPiP8t/Gg6m3dVXPZ7RlYV514sQJjBgxAm5ubpgxYwaeP38OIO39A/I7yIv3rygKpk6dipYtW6J9+/bpPg+kf89A3vw7V2e7NGjQACEhIQCApk2bQlEUzJkzB7169QJgXfcMACNHjsSpU6cwZcoU1K5dG6dPn8bSpUvh5OSEjh07ArC+e05Jn3/Lmb1G3//jDBj/cXZ2BpD224Y6FVF93hrs3LkTkydPRuXKlbFy5Uq4urq+vM/0vmU8ffo0T97/unXrEBUVhe3btyMxMRGA9j9WYmJihn/n6p/z4j2r3yhbtGihc97X1xezZ8/G2bNnAVjXPZ88eRKHDx/GrFmz0KNHDwCAt7c3ihQpgo8++ghvvPEGAOu659T0+bestixy8n+cAeM/ar9edHQ0atas+fL89evXdZ7P61avXo05c+bA29sboaGhL/+RODo6onTp0i/vV3Xv3j3Exsbmyfvfs2cPHjx4AF9f3zTP1alTB9OmTYOtrS2io6N1nlP/nBfvuXLlygDwssWoUlsebm5uVnfPt27dAoA002MbNWoEQNYsWNs9p1axYsUs79EY/8fzflvMSCpVqgQ3Nzfs3r1b5/zevXtRuXJllCtXzkwlM55NmzZh9uzZCAgIwMqVK9N8o/Dx8cGBAwd0Kps9e/bA1tYW3t7epi5ujn388cf44YcfdI7WrVujTJky+OGHH9ChQwc0atQIe/fufdnyAOSenZ2d4eHhYcbSZ4+7uzvKly+PnTt36pw/cOAA7Ozs4OXlZXX3rFZ0x48f1zkfEREBQGYCWts9p2Zvb6/XPeb0/zgX7qXg7OyMZcuW4cGDB9BoNFi9ejU2b96MkJAQVK9e3dzFy5F79+4hODgYpUuXxjvvvIN79+7hzp07L4+CBQuidu3aWLVqFcLDw+Hi4oKDBw9i3rx56NmzJ7p06WLuWzCYq6srSpcurXMcPnwYf//9NyZOnIjChQujTJkyWL58OS5fvozChQtjy5YtWLFiBcaMGYMmTZqY+xYMptFoULJkSaxevRrXrl2Dk5MTdu3ahdDQUAwYMAD+/v5Wd8+lSpXCn3/+ifXr16NQoUJISEjAnj17sGDBAjRt2hRDhw61unu+cOEC9u/fr7NwT597rFKlSs7+j2d3EYm12rBhg+Lv7694eHgoAQEByubNm81dJKPYvHmzUqNGjQyPLVu2KIqiKMePH1d69uypeHh4KM2bN1cWLFigPH/+3MylN55JkybpLNxTFEXZu3ev0rlzZ6VOnTpKmzZtlK+//tpMpTOeffv2Kd26dVM8PDyUli1bKkuXLlWSkpJePm9t95yQkKAsWLBAadmypeLh4aG0b99eWbJkic4CNWu65//9739pFu4pin73mJP/4xpFSdF+ISIiygDHMIiISC8MGEREpBcGDCIi0gsDBhER6YUBg4iI9MKAQUREemHAICIivTBgEJnB//73P3z77bfmLgaRQRgwiMxg3rx5OHLkiLmLQWQQBgwiE7t+/ToePHiA+vXrm7soRAZhahAiExo1ahT279+f5vzIkSN1dosjskTcD4PIhHr37o3k5GQcOHAA06ZNg4ODAwDAy8vLzCUjyhpbGEQmNnLkSEREROD33383d1GIDMIxDCITO3/+PGrXrm3uYhAZjAGDyITu37+PO3fuMGBQnsSAQWRCkZGRAMCAQXkSAwaRCV24cAEAUKdOy4nALgAAAJ9JREFUHTOXhMhwDBhEJhQTEwMAKFu2rJlLQmQ4TqslMqEKFSoAAGbMmAEvLy/Y2NigS5cu0Gg0Zi4ZUdY4rZbIhJ49e4aQkBD8+uuvePDgAcqVK4cDBw6Yu1hEemHAICIivXAMg4iI9MKAQUREemHAICIivTBgEBGRXhgwiIhILwwYRESkFwYMIiLSCwMGERHphQGDiIj0woBBRER6+X/hd73G9sZJPAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Let's take some sample paths\n",
    "L = np.linalg.cholesky(C + 1e-10 * np.eye(C.shape[0])) # add something to the diagonal for numerical stability\n",
    "fig, ax = plt.subplots()\n",
    "ax.set_xlabel('$t$')\n",
    "ax.set_ylabel('$y(t)$')\n",
    "for _ in range(5):\n",
    "    xi = np.random.randn(L.shape[0])\n",
    "    y = y_at_mu + np.dot(L, xi)\n",
    "    ax.plot(solver.t, y, 'r', lw=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Questions\n",
    "\n",
    "+ Repeat the above analysis with a smaller variance for $X$, say $1/10$'th of the original one. Is the comparision between the sampling and the perturbation approach closer or further away?\n",
    "\n",
    "+ Repeaqt the above analysis with a larger variance for $X$, say $2$ times the original one. Is the comparision between the sampling and the perturbation approach closer or further away?"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  },
  "latex_envs": {
   "bibliofile": "biblio.bib",
   "cite_by": "apalike",
   "current_citInitial": 1,
   "eqLabelWithNumbers": true,
   "eqNumInitial": 0
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
